package com.sjh;

/**
 * @author jack
 * @data 2020/9/4 2:14 下午
 */
import java.util.concurrent.Semaphore;

public class SemaphoreTest {
    public static void main(String[] args) {

        final  Semaphore sp = new Semaphore(3);
        for(int i=0;i<10;i++){
            Runnable runnable = new Runnable(){
                @Override
                public void run(){
                    try {
                        sp.acquire();
                    } catch (InterruptedException e1) {
                        e1.printStackTrace();
                    }
                    System.out.println("线程" + Thread.currentThread().getName() +
                            "进入，当前已有" + (3-sp.availablePermits()) + "并发");
                    try {
                        Thread.sleep((long)(Math.random()*10000));
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("线程" + Thread.currentThread().getName() +
                            "即将离开");
                    sp.release();
                    System.out.println("线程" + Thread.currentThread().getName() +
                            "已离开，当前已有" + (3-sp.availablePermits()) + "并发");
                }
            };
            ThreadLocalTest2.THREAD_POOL_EXECUTOR.execute(runnable);
        }
    }

}
